数据结构实验五_二叉树基本操作的编程实现(C语言)

一、实验题目

二叉树基本操作的编程实现

二、题目要求

二叉树基本操作的编程实现,掌握二叉树的建立、遍历、插入、删除等基本操作的编程实现,也可以进一步编程实现查找等操作,存储结构主要采用顺序或链接结构。也鼓励学生利用基本操作进行一些应用的程序设计。

三、运行结果

在这里插入图片描述

四、程序基本功能

1、先根递归遍历(DLR)

若二叉树为空,遍历结束。否则,先访问根结点;然后先根遍历根结点的左子树;再先根遍历根结点的右子树。
在这里插入图片描述

2、中根递归遍历(LDR)

若二叉树为空,遍历结束。否则,先进行中根遍历根结点的左子树;再访问根结点;再中根遍历根结点的右子树。
在这里插入图片描述

3、后根递归遍历(LRD)

若二叉树为空,遍历结束。否则,先进行后根遍历根结点的左子树;再后根遍历根结点的右子树;再访问根结点。
在这里插入图片描述

4、先根非递归遍历

二叉树以二叉链表存放,一维数组stack[maxsize]用以实现栈,变量top用来表示当前栈顶的位置。

5、中根非递归遍历

二叉树以二叉链表存放,一维数组stack[maxsize]用以实现栈,变量top用来表示当前栈顶的位置。

6、后根非递归遍历

由于必须先把两个孩子都访问完毕,才可以访问“根”,为了保留返回地址,所以必然进栈两次,但并不是任何结点总有两个孩子,所以无法准确判断当前栈顶是左孩子还是右孩子,解决的方法有两种,一是启用两个栈,分别处理。二是约定结点要入两次栈,出两次栈,而访问结点是在第二次出栈时访问。因此,为了区别同一个结点指针的两次出栈,设置一标志flag=1,令flag=1代表第一次出栈,结点不能访问,flag=2代表第二次出栈,结点可以访问,当结点指针进、出栈时,其标志flag也同时进、出栈。因此,可将栈中元素的数据类型定义为指针和标志flag合并。定义如下:

Class stackdata			//创建一个stackdata类,在非递归遍历算法中需要
{
   
	friend class btree;
	private:
		node *link;
		int  flag;
	public:
		stackdata()  {
   } ;
		~stackdata()  {
   };
};

7、层次遍历

二叉树的层次遍历是指从二叉树的第一层开始,从上至下逐层遍历,在同一层中,则按从左到右的顺序对结点逐个访问。
在这里插入图片描述

五、部分源码

这次实验相对于来说有点困难,所以老师直接给了我们源代码

/*
需要把所有遍历的函数补上,确保功能正确。
自己需要画至少四层的二叉树,然后手工写出各种遍历结果,
然后用计算机建立相应的二叉树,通过程序看看结果是否一样&
  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值